package cn.lcvc.xnc.application.common.utils.file;


import cn.lcvc.xnc.application.common.exception.model.MyWebException;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyFileUpload {

	//获取允许上传的文件类型，根据kindEditor方法设计，需要考虑大小写。也可用于其它上传组件，现在为本站所用的上传模式
	public final static HashMap<String, String> EXT_MAP = new HashMap<String, String>(){
		{
			put("image", "gif,jpg,jpeg,png,bmp");
			put("flash", "swf,flv");
			put("media", "swf,flv,mp3,mp4,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
			put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,chm");
			put("table", "xls,xlsx");
		}
	};

	/**
	 * 检查dirName是否是允许的格式，如果为null则默认为image
	 * 根据dirName，判断后缀名是否是dirName允许的格式
	 * @param ext 后缀名 如jpg，txt
	 * @param dirName 目录名  如image,file。如果是null则默认为上传图片
	 * @return true表示允许
	 * @Throws MyFormPropertyException 检查从web层传递过来的值是否合法
	 */
	public static boolean validateExtByDir(String ext,String dirName) throws MyWebException {
		boolean judge=false;
		if(StringUtils.hasLength(ext)){
			// 统一将后缀名改为小写字母
			ext=ext.toLowerCase();
			if(dirName==null||dirName==""){
				dirName="image";
			}
			Map<String, String> extMap = EXT_MAP;//获取项目中设置的上传规则
			if(extMap.keySet().contains(dirName)){//如果dirName属于网站的对应目录
				// 获取上传文件对应的允许后缀名集合
				String[] exts = extMap.get(dirName).split(",");
				List<String> extList = Arrays.<String> asList(exts);// 将数组转换为list
				if (!extList.contains(ext)) {// 如果允许扩展名中不包含上传文件的扩展名
					throw new MyWebException("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。");
				}else{//如果后缀名符合网站要求
					judge=true;
				}
			}else{//如果dirName不属于网站的对应目录
				throw new MyWebException("上传文件dirName参数错误，程序内部错误");
			}
		}else{
			throw new MyWebException("文件后缀名不能为空");
		}
		return judge;
	}

}
